package com.uacp.sgb.vista.controladores;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import com.uacp.sgb.datos.dominio.entidades.Dependencia;
import com.uacp.sgb.datos.dominio.persistencia.dao.DependenciaDao;
import com.uacp.sgb.datos.dominio.persistencia.util.UtilSQLite;

@ManagedBean(name = "exportarSQLite")
@ViewScoped
public class ControlExportarSqlite implements Serializable
{
    private StreamedContent file;
    private List<Dependencia> dependencias;
    private List<Dependencia> depSeleccionados;
    private Dependencia dependencia;

    public ControlExportarSqlite() 
    {
        cargarDatosDependencias();
    }

    public StreamedContent getFile() 
    {
        UtilSQLite.exportarAlgunasDependencias(depSeleccionados);

        InputStream stream = null;
        
        try
        {
        	stream = new FileInputStream("D:\\Exportacion.db");
        }
        catch(Exception e)
        {
        	e.printStackTrace();
        }
        
        file = new DefaultStreamedContent(stream, "application/force-download", "Exportacion.db");
        
        return file;
    }

    private void cargarDatosDependencias() {
        dependencias = DependenciaDao.listar();
       // dependencia = dependencias.get(0);
    }

    public List<Dependencia> filtrarDependencias(String filtro) {
        filtro = filtro.trim().toLowerCase();

        List<Dependencia> filtradas = new ArrayList<>();

        for (Dependencia dependencia : dependencias) {
            if (dependencia.getNombre().toLowerCase().startsWith(filtro)) {
                filtradas.add(dependencia);
            }
        }

        return filtradas;
    }

    public void marcarDependencia() 
    {
        if (!depSeleccionados.contains(dependencia)) 
        {
            depSeleccionados.add(dependencia);
        }
    }

    public List<Dependencia> getDependencias() {
        return dependencias;
    }

    public void setDependencias(List<Dependencia> dependencias) {
        this.dependencias = dependencias;
    }

    public Dependencia getDependencia() {
        return dependencia;
    }

    public void setDependencia(Dependencia dependencia) {
        this.dependencia = dependencia;
    }

    public List<Dependencia> getDepSeleccionados() {
        return depSeleccionados;
    }

    public void setDepSeleccionados(List<Dependencia> depSeleccionados) {
        this.depSeleccionados = depSeleccionados;
    }
}
